home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3dm / midi / mdPanic.z / mdPanic
Encoding:
Text File  |  2002-10-03  |  3.8 KB  |  133 lines

  1.  
  2.  
  3.  
  4. mmmmddddPPPPaaaannnniiiicccc((((3333ddddmmmm))))                                                      mmmmddddPPPPaaaannnniiiicccc((((3333ddddmmmm))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      mdPanic - flush MIDI output and transmit (obsolete)
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ####iiiinnnncccclllluuuuddddeeee <<<<ddddmmmmeeeeddddiiiiaaaa////mmmmiiiiddddiiii....hhhh>>>>
  13.  
  14.      iiiinnnntttt mmmmddddPPPPaaaannnniiiicccc((((MMMMDDDDppppoooorrrrtttt ppppoooorrrrtttt))))
  15.  
  16. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  17.      mmmmddddPPPPaaaannnniiiicccc is an obsolete routine which sends ALL NOTES OFF and RESET ALL
  18.      CONTROLLERS messages on all channels.
  19.  
  20.      The following program illustrates the prefered method of silencing stuck
  21.      notes (the code is also available in
  22.      /usr/share/src/dmedia/midi/simple/panic.c if the MIDI example code is
  23.      installed).
  24.  
  25.      #include <stdio.h>
  26.      #include <dmedia/midi.h>
  27.  
  28.      long long stamp = 0;
  29.  
  30.      char *usage = "Usage: panic [-f] [-a | interface name]"
  31.  
  32.      /*
  33.       * Transmit ALL NOTES OFF, ALL SOUND OFF, and RESET ALL CONTROLLERS
  34.       * messages on all 16 channels.
  35.       */
  36.      void
  37.      send_control_messages(MDport port)
  38.      {
  39.           int channel, byte;
  40.           MDevent ev;
  41.           char data_byte[] = { MD_RESETALLCONTROLLERS, MD_ALLNOTESOFF,
  42.                          MD_ALLSOUNDOFF };
  43.  
  44.           for (channel = 0; channel < 16; channel++) {
  45.                for (byte = 0; byte < 3; byte++) {
  46.                     ev.stamp = stamp++;
  47.                     ev.msg[0] = MD_CONTROLCHANGE | channel;
  48.                     ev.msg[1] = data_byte[byte];
  49.                     ev.msg[2] = 0;
  50.                     mdSend(port, &ev, 1);
  51.                }
  52.           }
  53.      }
  54.  
  55.  
  56.      /*
  57.       * Transmit explicit NOTE OFF events on all channels.
  58.       */
  59.      void
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. mmmmddddPPPPaaaannnniiiicccc((((3333ddddmmmm))))                                                      mmmmddddPPPPaaaannnniiiicccc((((3333ddddmmmm))))
  71.  
  72.  
  73.  
  74.      send_note_off_events(MDport port)
  75.      {
  76.           int channel, note;
  77.           MDevent ev;
  78.  
  79.           for (channel = 0; channel < 16; channel++) {
  80.                for (note = 0; note < 128; note++) {
  81.                     ev.stamp = stamp++;
  82.                     ev.msg[0] = MD_NOTEOFF;
  83.                     ev.msg[1] = note;
  84.                     ev.msg[2] = 0;
  85.                     mdSend(port, &ev, 1);
  86.                }
  87.           }
  88.      }
  89.  
  90.      void
  91.      main(int argc, char **argv)
  92.      {
  93.           int  num_interfaces;
  94.           MDport    port;
  95.  
  96.           /* First initialize the MIDI library */
  97.           num_interfaces = mdInit();
  98.           if (num_interfaces == 0) {
  99.                fprintf(stderr, "panic: no interfaces configured0);
  100.                exit(1);
  101.           }
  102.  
  103.           /* Open the port */
  104.           outport = mdOpenOutPort(name);
  105.           if (outport == NULL) {
  106.                fprintf(stderr, "panic: Could not open interface0);
  107.                exit(1);
  108.           }
  109.  
  110.           /* Transmit 1 event every millisecond */
  111.           mdSetStampMode(outport, MD_RELATIVETICKS);
  112.           mdSetDivision(outport, 1);
  113.           mdSetTempo(outport, 1000);
  114.  
  115.           send_note_off_events(outport);
  116.           send_control_messages(outport);
  117.  
  118.           /* Wait for messages to go out */
  119.           while (mdTellNow(outport) < stamp) ;
  120.      }
  121.  
  122.  
  123.  
  124.  
  125.  
  126.                                                                         PPPPaaaaggggeeee 2222
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.